home *** CD-ROM | disk | FTP | other *** search
- unit WinSock;
-
- {$C FIXED PRELOAD DISCARDABLE}
-
- (*
- * WINSOCK.H--definitions to be used with the WINSOCK.DLL
- *
- * This header file corresponds to version 1.1 of the Windows Sockets specification.
- *
- * This file includes parts which are Copyright (c) 1982-1986 Regents
- * of the University of California. All rights reserved. The
- * Berkeley Software License Agreement specifies the terms and
- * conditions for redistribution.
- *
- * Original WINSOCK.H Change log:
- *
- * Fri Apr 23 16:31:01 1993 Mark Towfiq (towfiq@Microdyne.COM)
- * New version from David Treadwell which adds extern "C" around
- * __WSAFDIsSet() and removes "const" from buf param of
- * WSAAsyncGetHostByAddr(). Added change log.
- *
- * Sat May 15 10:55:00 1993 David Treadwell (davidtr@microsoft.com)
- * Fix the IN_CLASSC macro to account for class-D multicasts.
- * Add AF_IPX == AF_NS.
- *
- * Tue Oct 19 13:05:02 1993 Mark Towfiq (Mark.Towfiq@Sun.COM)
- * New version from David Treadwell which changes type of counter in
- * fd_set to u_int instead of u_short, so that it is correctly
- * promoted in Winsdows NT and other 32-bit environments.
- *
- * Translated to BP7 by: Randy Bratton, CServe: 72355,1466
- *
- * NOTE: I have tried to keep the declaration order in WINSOCK.PAS the
- * same as that in WINSOCK.H. Most of the comments from the original
- * WINSOCK.H have been left intact in the Pascal version.
- * My comments are labeled with RMB.
- *
- * NO WARRANTY EXPRESSED OR IMPLIED.
- *
- * WINSOCK.PAS Revision History
- * Version Date By Comments
- * 1.00 03/04/94 RMB Initial revision.
- * 1.01 08/22/94 RMB General cleanup before posting to
- * CompuServe.
- * 1.02 09/29/94 RMB Added h_addr function for THostEnt
- * structure.
- * 1.03 03/10/96 RMB Fixed bug (noted by P. Payzant) in
- * TWSAData. Now corresponds to WINSOCK.H
- * dated 10/19/93 (except where noted).
- *)
-
- interface
-
- uses
- WinTypes;
-
- type
- (*
- * Basic system type definitions, taken from the BSD file sys/types.h.
- *)
- u_char = char;
- u_short = word; (* in Borland C++, int and short are both 16-bits RMB *)
- u_int = word;
- u_long = longint;
-
- (*
- * Other basic types needed for the C to Pascal translation. RMB
- *)
- PPChar = ^PChar; (* used with char FAR * FAR * xxx RMB *)
-
- (*
- * The new type to be used in all
- * instances which refer to sockets.
- *
- * Must be renamed from SOCKET as there is a function called
- * socket(). RMB
- *)
- PSocket = ^TSocket;
- TSocket = u_int;
-
- (*
- * Select uses arrays of SOCKETs. These macros manipulate such
- * arrays. FD_SETSIZE may be defined by the user before including
- * this file, but the default here should be >= 64.
- *
- * CAVEAT IMPLEMENTOR and USER: THESE MACROS AND TYPES MUST BE
- * INCLUDED IN WINSOCK.H EXACTLY AS SHOWN HERE.
- *)
- const
- FD_SETSIZE =64;
-
- type
- PFd_Set = ^TFd_Set;
- TFd_Set = record
- fd_count : u_int; (* how many are SET? *) (* RMB 03/10/96 1.03 *)
- (* 10/19/93 update to original WINSOCK.H *)
- fd_array : array[0..FD_SETSIZE-1] of TSocket; (* an array of SOCKETs *)
- end;
-
- function __WSAFDIsSet(fd: TSocket; aset: PFd_Set): integer;
-
- (*
- ** NB: Have not done any work with socket arrays, therefore these
- ** routines have not been tested. RMB 08/22/94 1.01
- *)
- procedure Fd_Clr(fd: TSocket; aset: PFd_Set);
- procedure Fd_Set(fd: TSocket; aset: PFd_Set);
- procedure Fd_Zero(aset: PFd_Set);
- function Fd_IsSet(fd: TSocket; aset: PFd_Set): boolean;
-
- (*
- * Structure used in select() call, taken from the BSD file sys/time.h.
- *)
- type
- PTimeval = ^Timeval;
- Timeval = record
- tv_sec: longint; (* seconds *)
- tv_usec: longint; (* and microseconds *)
- end;
- (*
- * Operations on timevals.
- *
- * NB: timercmp does not work for >= or <=.
- *)
- (*
- ** DEFINES (macros) for timerisset, timercmp, and timerclear
- ** not implemented. RMB
- *)
-
- (*
- * Commands for ioctlsocket(), taken from the BSD file fcntl.h.
- *
- *
- * Ioctl's have the command encoded in the lower word,
- * and the size of any in or out parameters in the upper
- * word. The high 2 bits of the upper word are used
- * to encode the in/out status of the parameter; for now
- * we restrict parameters to at most 128 bytes.
- *)
- const
- IOCPARM_MASK = $07f; (* parameters must be < 128 bytes *)
- IOC_VOID = $20000000; (* no parameters *)
- IOC_OUT = $040000000; (* copy out parameters *)
- IOC_IN = $080000000; (* copy in parameters *)
- IOC_INOUT = (IOC_IN or IOC_OUT);
- (* 0x20000000 distinguishes new &
- old ioctl's *)
- (*
- ** DEFINES (macros) for _IO, _IOR, _IOW, FIONREAD, FIONBIO, FIOASYNC,
- ** SIOCSHIWAT, SIOCGHIWAT, SIOCSLOWAT, SIOCGLOWAT, SIOCATMARK
- ** not implemented. RMB
- *)
-
- (*
- * Structures returned by network data base library, taken from the
- * BSD file netdb.h. All addresses are supplied in host order, and
- * returned in network order (suitable for use in system calls).
- *)
-
- type
- PHostEnt = ^THostEnt;
- THostEnt = record
- h_name : PChar; (* official name of host *)
- h_aliases: PPChar; (* alias list *)
- h_addrtype: integer; (* host address type *)
- h_length : integer; (* length of address *)
- h_addr_list: PPChar; (* list of addresses *)
- end;
-
- {
- C #define h_addr h_addr_list[0] omitted as currently only needed for
- backward compatibility. RMB 08/22/94 1.01
- }
- function h_addr(aHostEnt: THostEnt): PChar; (* RMB 09/29/94 1.02 *)
-
- (*
- * It is assumed here that a network number
- * fits in 32 bits.
- *)
- type
- PNetEnt = ^TNetEnt;
- TNetEnt = record
- n_name : PChar; (* official name of net *)
- n_aliases : PPChar; (* alias list *)
- n_addrtype : integer; (* net address type *)
- n_net : u_long; (* network $ *)
- end;
-
- type
- PServEnt = ^TServEnt;
- TServEnt = record
- s_name : PChar; (* official service name *)
- s_aliases : PPChar; (* alias list *)
- s_port : integer; (* port $ *)
- s_proto : PChar; (* protocol to use *)
- end;
-
- type
- PProtoEnt = ^TProtoEnt;
- TProtoEnt = record
- p_name : PChar; (* official protocol name *)
- p_aliases : PPChar; (* alias list *)
- p_proto : integer; (* protocol $ *)
- end;
-
- (*
- * Constants and procedures defined by the internet system,
- * Per RFC 790, September 1981, taken from the BSD file netinet/in.h.
- *)
-
- (*
- * Protocols
- *)
- const
- IPPROTO_IP = 0; (* dummy for IP *)
- IPPROTO_ICMP = 1; (* control message protocol *)
- IPPROTO_GGP = 2; (* gateway^2 (deprecated) *)
- IPPROTO_TCP = 6; (* tcp *)
- IPPROTO_PUP = 12; (* pup *)
- IPPROTO_UDP = 17; (* user datagram protocol *)
- IPPROTO_IDP = 22; (* xns idp *)
- IPPROTO_ND = 77; (* UNOFFICIAL net disk proto *)
-
- IPPROTO_RAW = 255; (* raw IP packet *)
- IPPROTO_MAX = 256;
-
- (*
- * Port/socket numbers: network standard functions
- *)
- IPPORT_ECHO = 7;
- IPPORT_DISCARD = 9;
- IPPORT_SYSTAT = 11;
- IPPORT_DAYTIME = 13;
- IPPORT_NETSTAT = 15;
- IPPORT_FTP = 21;
- IPPORT_TELNET = 23;
- IPPORT_SMTP = 25;
- IPPORT_TIMESERVER = 37;
- IPPORT_NAMESERVER = 42;
- IPPORT_WHOIS = 43;
- IPPORT_MTP = 57;
-
- (*
- * Port/socket numbers: host specific functions
- *)
- IPPORT_TFTP = 69;
- IPPORT_RJE = 77;
- IPPORT_FINGER = 79;
- IPPORT_TTYLINK = 87;
- IPPORT_SUPDUP = 95;
-
- (*
- * UNIX TCP sockets
- *)
- IPPORT_EXECSERVER = 512;
- IPPORT_LOGINSERVER = 513;
- IPPORT_CMDSERVER = 514;
- IPPORT_EFSSERVER = 520;
-
- (*
- * UNIX UDP sockets
- *)
- IPPORT_BIFFUDP = 512;
- IPPORT_WHOSERVER = 513;
- IPPORT_ROUTESERVER = 520;
- (* 520+1 also used *)
-
- (*
- * Ports < IPPORT_RESERVED are reserved for
- * privileged processes (e.g. root).
- *)
- IPPORT_RESERVED = 1024;
-
- (*
- * Link numbers
- *)
- IMPLINK_IP = 155;
- IMPLINK_LOWEXPER = 156;
- IMPLINK_HIGHEXPER = 158;
-
- (*
- * Internet address (old style... should be updated)
- *)
- type
- PIn_Addr = ^TIn_Addr;
- TIn_Addr = record
- case integer of
- 1: (S_un_b : record
- s_b1,
- s_b2,
- s_b3,
- s_b4 : u_char;
- end);
- 2: (S_un_w : record
- s_w1,
- s_w2 : u_short;
- end);
- 3: (S_addr : u_long);
- end;
-
- function s_addr(s_un: TIn_Addr): u_long;
- function s_host(s_un: TIn_Addr): u_char;
- function s_net(s_un: TIn_Addr): u_char;
- function s_imp(s_un: TIn_Addr): u_short;
- function s_impno(s_un: TIn_Addr): u_char;
- function s_lh(s_un: TIn_Addr): u_char;
-
- (*
- * Definitions of bits in internet address integers.
- * On subnets, the decomposition of addresses to host and net parts
- * is done according to subnet mask, not the masks here.
- *)
- const
- IN_CLASSA_NET = $ff000000;
- IN_CLASSA_NSHIFT = 24;
- IN_CLASSA_HOST = $00ffffff;
- IN_CLASSA_MAX = 128;
-
- IN_CLASSB_NET = $ffff0000;
- IN_CLASSB_NSHIFT = 16;
- IN_CLASSB_HOST = $0000ffff;
- IN_CLASSB_MAX = 65536;
-
- IN_CLASSC_NET = $ffffff00;
- IN_CLASSC_NSHIFT = 8;
- IN_CLASSC_HOST = $000000ff;
-
- INADDR_ANY = $000000000;
- INADDR_LOOPBACK = $7f000001;
- INADDR_BROADCAST = $ffffffff;
- INADDR_NONE = $ffffffff;
-
- function In_ClassA(i : longint) : boolean;
- function In_ClassB(i : longint) : boolean;
- function In_ClassC(i : longint) : boolean;
-
- (*
- * Socket address, internet style.
- *)
- type
- PSockAddr_In = ^TSockAddr_In;
- TSockAddr_in = record
- sin_family : integer;
- sin_port : u_short;
- sin_addr : TIn_Addr;
- sin_zero : array[0..7] of char;
- end;
-
- const
- WSADESCRIPTION_LEN = 256;
- WSASYS_STATUS_LEN = 128;
-
- type
- PWSAData = ^TWSAData;
- TWSAData = record
- wVersion : word;
- wHighVersion : word;
- szDescription : array[0..WSADESCRIPTION_LEN] of char; (* RMB 03/10/96 1.03 *)
- szSystemStatus : array[0..WSASYS_STATUS_LEN] of char; (* RMB 03/10/96 1.03 *)
- iMaxSockets : u_short;
- iMaxUdpDg : u_short;
- lpVendorInfo : PChar;
- end;
-
- (*
- * Options for use with [gs]etsockopt at the IP level.
- *)
- const
-
- IP_OPTIONS = 1; (* set/get IP per-packet options *)
-
- (*
- * Definitions related to sockets: types, address families, options,
- * taken from the BSD file sys/socket.h.
- *)
-
- (*
- * This is used instead of -1, since the
- * SOCKET type is unsigned.
- *)
- const
- INVALID_SOCKET = TSocket(not 0);
- SOCKET_ERROR = -1;
-
- (*
- * Types
- *)
- SOCK_STREAM = 1; (* stream socket *)
- SOCK_DGRAM = 2; (* datagram socket *)
- SOCK_RAW = 3; (* raw-protocol interface *)
- SOCK_RDM = 4; (* reliably-delivered message *)
- SOCK_SEQPACKET = 5; (* sequenced packet stream *)
-
- (*
- * Option flags per-socket.
- *)
- SO_DEBUG = $0001; (* turn on debugging info recording *)
- SO_ACCEPTCONN = $0002; (* socket has had listen() *)
- SO_REUSEADDR = $0004; (* allow local address reuse *)
- SO_KEEPALIVE = $0008; (* keep connections alive *)
- SO_DONTROUTE = $0010; (* just use interface addresses *)
- SO_BROADCAST = $0020; (* permit sending of broadcast msgs *)
- SO_USELOOPBACK = $0040; (* bypass hardware when possible *)
- SO_LINGER = $0080; (* linger on close if data present *)
- SO_OOBINLINE = $0100; (* leave received OOB data in line *)
-
- SO_DONTLINGER = u_int(not SO_LINGER);
-
- (*
- * Additional options.
- *)
- SO_SNDBUF = $1001; (* send buffer size *)
- SO_RCVBUF = $1002; (* receive buffer size *)
- SO_SNDLOWAT = $1003; (* send low-water mark *)
- SO_RCVLOWAT = $1004; (* receive low-water mark *)
- SO_SNDTIMEO = $1005; (* send timeout *)
- SO_RCVTIMEO = $1006; (* receive timeout *)
- SO_ERROR = $1007; (* get error status and clear *)
- SO_TYPE = $1008; (* get socket type *)
-
- (*
- * TCP options.
- *)
- TCP_NODELAY = $0001;
-
- (*
- * Address families.
- *)
- AF_UNSPEC = 0; (* unspecified *)
- AF_UNIX = 1; (* local to host (pipes, portals) *)
- AF_INET = 2; (* internetwork: UDP, TCP, etc. *)
- AF_IMPLINK = 3; (* arpanet imp addresses *)
- AF_PUP = 4; (* pup protocols: e.g. BSP *)
- AF_CHAOS = 5; (* mit CHAOS protocols *)
- AF_NS = 6; (* XEROX NS protocols *)
- AF_IPX = 6; (* IPX and SPX *) (* RMB 03/10/96 1.03 *)
- (* 05/15/93 update to original WINSOCK.H *)
- AF_ISO = 7; (* ISO protocols *)
- AF_OSI = AF_ISO; (* OSI is ISO *)
- AF_ECMA = 8; (* european computer manufacturers *)
- AF_DATAKIT = 9; (* datakit protocols *)
- AF_CCITT = 10; (* CCITT protocols, X.25 etc *)
- AF_SNA = 11; (* IBM SNA *)
- AF_DECnet = 12; (* DECnet *)
- AF_DLI = 13; (* Direct data link interface *)
- AF_LAT = 14; (* LAT *)
- AF_HYLINK = 15; (* NSC Hyperchannel *)
- AF_APPLETALK = 16; (* AppleTalk *)
- AF_NETBIOS = 17; (* NetBios-style addresses *)
-
- AF_MAX = 18;
-
- (*
- * Structure used by kernel to store most
- * addresses.
- *)
- type
- PSockAddr = ^TSockAddr;
- TSockAddr = record
- sa_family : u_short; (* address family *)
- sa_data : array[0..13] of char; (* up to 14 bytes of direct address *)
- end;
-
- (*
- * Structure used by kernel to pass protocol
- * information in raw sockets.
- *)
- type
- PSockProto = ^TSockProto;
- TSockProto = record
- sp_family : u_short; (* address family *)
- sp_protocol : u_short; (* protocol *)
- end;
-
- (*
- * Protocol families, same as address families for now.
- *)
- const
-
- PF_UNSPEC = AF_UNSPEC;
- PF_UNIX = AF_UNIX;
- PF_INET = AF_INET;
- PF_IMPLINK = AF_IMPLINK;
- PF_PUP = AF_PUP;
- PF_CHAOS = AF_CHAOS;
- PF_NS = AF_NS;
- PF_IPX = AF_IPX; (* RMB 3/9/96 1.03 *)
- (* 5/15/93 update to original WINSOCK.H *)
- PF_ISO = AF_ISO;
- PF_OSI = AF_OSI;
- PF_ECMA = AF_ECMA;
- PF_DATAKIT = AF_DATAKIT;
- PF_CCITT = AF_CCITT;
- PF_SNA = AF_SNA;
- PF_DECnet = AF_DECnet;
- PF_DLI = AF_DLI;
- PF_LAT = AF_LAT;
- PF_HYLINK = AF_HYLINK;
- PF_APPLETALK = AF_APPLETALK;
-
- PF_MAX = AF_MAX;
-
- (*
- * Structure used for manipulating linger option.
- *)
- type
- PLinger = ^TLinger;
- TLinger = record
- l_onoff : WordBool; {was u_short RMB} (* option on/off *) (* RMB 03/10/96 1.03 *)
- l_linger : u_short; (* linger time *)
- end;
-
- (*
- * Level number for (get/set)sockopt() to apply to socket itself.
- *)
- const
- SOL_SOCKET = -1; {was $ffff RMB} (* options for socket level *)
-
- (*
- * Maximum queue length specifiable by listen.
- *)
- const
- SOMAXCONN = 5;
-
- MSG_OOB = $1; (* process out-of-band data *)
- MSG_PEEK = $2; (* peek at incoming message *)
- MSG_DONTROUTE = $4; (* send without using routing tables *)
-
- MSG_MAXIOVLEN = 16;
-
- (*
- * Define constant based on rfc883, used by gethostbyxxxx() calls.
- *)
- const
- MAXGETHOSTSTRUCT = 1024;
-
- (*
- * Define flags to be used with the WSAAsyncSelect() call.
- *)
- const
- FD_READ = $01;
- FD_WRITE = $02;
- FD_OOB = $04;
- FD_ACCEPT = $08;
- FD_CONNECT = $10;
- FD_CLOSE = $20;
-
- (*
- * All Windows Sockets error constants are biased by WSABASEERR from
- * the "normal"
- *)
- const
- WSABASEERR = 10000;
-
- (*
- * Windows Sockets definitions of regular Microsoft C error constants
- *)
- const
- WSAEINTR = (WSABASEERR+4);
- WSAEBADF = (WSABASEERR+9);
- WSAEACCES = (WSABASEERR+13);
- WSAEFAULT = (WSABASEERR+14);
- WSAEINVAL = (WSABASEERR+22);
- WSAEMFILE = (WSABASEERR+24);
-
- (*
- * Windows Sockets definitions of regular Berkeley error constants
- *)
- const
- WSAEWOULDBLOCK = (WSABASEERR+35);
- WSAEINPROGRESS = (WSABASEERR+36);
- WSAEALREADY = (WSABASEERR+37);
- WSAENOTSOCK = (WSABASEERR+38);
- WSAEDESTADDRREQ = (WSABASEERR+39);
- WSAEMSGSIZE = (WSABASEERR+40);
- WSAEPROTOTYPE = (WSABASEERR+41);
- WSAENOPROTOOPT = (WSABASEERR+42);
- WSAEPROTONOSUPPORT = (WSABASEERR+43);
- WSAESOCKTNOSUPPORT = (WSABASEERR+44);
- WSAEOPNOTSUPP = (WSABASEERR+45);
- WSAEPFNOSUPPORT = (WSABASEERR+46);
- WSAEAFNOSUPPORT = (WSABASEERR+47);
- WSAEADDRINUSE = (WSABASEERR+48);
- WSAEADDRNOTAVAIL = (WSABASEERR+49);
- WSAENETDOWN = (WSABASEERR+50);
- WSAENETUNREACH = (WSABASEERR+51);
- WSAENETRESET = (WSABASEERR+52);
- WSAECONNABORTED = (WSABASEERR+53);
- WSAECONNRESET = (WSABASEERR+54);
- WSAENOBUFS = (WSABASEERR+55);
- WSAEISCONN = (WSABASEERR+56);
- WSAENOTCONN = (WSABASEERR+57);
- WSAESHUTDOWN = (WSABASEERR+58);
- WSAETOOMANYREFS = (WSABASEERR+59);
- WSAETIMEDOUT = (WSABASEERR+60);
- WSAECONNREFUSED = (WSABASEERR+61);
- WSAELOOP = (WSABASEERR+62);
- WSAENAMETOOLONG = (WSABASEERR+63);
- WSAEHOSTDOWN = (WSABASEERR+64);
- WSAEHOSTUNREACH = (WSABASEERR+65);
- WSAENOTEMPTY = (WSABASEERR+66);
- WSAEPROCLIM = (WSABASEERR+67);
- WSAEUSERS = (WSABASEERR+68);
- WSAEDQUOT = (WSABASEERR+69);
- WSAESTALE = (WSABASEERR+70);
- WSAEREMOTE = (WSABASEERR+71);
-
- (*
- * Extended Windows Sockets error constant definitions
- *)
- const
- WSASYSNOTREADY = (WSABASEERR+91);
- WSAVERNOTSUPPORTED = (WSABASEERR+92);
- WSANOTINITIALISED = (WSABASEERR+93);
-
- (*
- * Error return codes from gethostbyname() and gethostbyaddr()
- * (when using the resolver). Note that these errors are
- * retrieved via WSAGetLastError() and must therefore follow
- * the rules for avoiding clashes with error numbers from
- * specific implementations or language run-time systems.
- * For this reason the codes are based at WSABASEERR+1001.
- * Note also that [WSA]NO_ADDRESS is defined only for
- * compatibility purposes.
- *)
-
- function h_errno : integer;
-
- const
- (* Authoritative Answer: Host not found *)
- WSAHOST_NOT_FOUND = (WSABASEERR+1001);
- HOST_NOT_FOUND = WSAHOST_NOT_FOUND;
-
- (* Non-Authoritative: Host not found, or SERVERFAIL *)
- WSATRY_AGAIN = (WSABASEERR+1002);
- TRY_AGAIN = WSATRY_AGAIN;
-
- (* Non recoverable errors, FORMERR, REFUSED, NOTIMP *)
- WSANO_RECOVERY = (WSABASEERR+1003);
- NO_RECOVERY = WSANO_RECOVERY;
-
- (* Valid name, no data record of requested type *)
- WSANO_DATA = (WSABASEERR+1004);
- NO_DATA = WSANO_DATA;
-
- (* no address, look for MX record *)
- WSANO_ADDRESS = WSANO_DATA;
- NO_ADDRESS = WSANO_ADDRESS;
-
- (*
- * Windows Sockets errors redefined as regular Berkeley error constants
- *)
- const
- EWOULDBLOCK = WSAEWOULDBLOCK;
- EINPROGRESS = WSAEINPROGRESS;
- EALREADY = WSAEALREADY;
- ENOTSOCK = WSAENOTSOCK;
- EDESTADDRREQ = WSAEDESTADDRREQ;
- EMSGSIZE = WSAEMSGSIZE;
- EPROTOTYPE = WSAEPROTOTYPE;
- ENOPROTOOPT = WSAENOPROTOOPT;
- EPROTONOSUPPORT = WSAEPROTONOSUPPORT;
- ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT;
- EOPNOTSUPP = WSAEOPNOTSUPP;
- EPFNOSUPPORT = WSAEPFNOSUPPORT;
- EAFNOSUPPORT = WSAEAFNOSUPPORT;
- EADDRINUSE = WSAEADDRINUSE;
- EADDRNOTAVAIL = WSAEADDRNOTAVAIL;
- ENETDOWN = WSAENETDOWN;
- ENETUNREACH = WSAENETUNREACH;
- ENETRESET = WSAENETRESET;
- ECONNABORTED = WSAECONNABORTED;
- ECONNRESET = WSAECONNRESET;
- ENOBUFS = WSAENOBUFS;
- EISCONN = WSAEISCONN;
- ENOTCONN = WSAENOTCONN;
- ESHUTDOWN = WSAESHUTDOWN;
- ETOOMANYREFS = WSAETOOMANYREFS;
- ETIMEDOUT = WSAETIMEDOUT;
- ECONNREFUSED = WSAECONNREFUSED;
- ELOOP = WSAELOOP;
- ENAMETOOLONG = WSAENAMETOOLONG;
- EHOSTDOWN = WSAEHOSTDOWN;
- EHOSTUNREACH = WSAEHOSTUNREACH;
- ENOTEMPTY = WSAENOTEMPTY;
- EPROCLIM = WSAEPROCLIM;
- EUSERS = WSAEUSERS;
- EDQUOT = WSAEDQUOT;
- ESTALE = WSAESTALE;
- EREMOTE = WSAEREMOTE;
-
- (* Socket function prototypes *)
-
- function accept(s: TSOCKET; addr: PSockAddr; addrlen: PInteger): TSOCKET;
-
- function bind(s: TSOCKET; const addr: PSockAddr; namelen: integer): integer;
-
- function closesocket(s: TSOCKET): integer;
-
- function connect(s: TSOCKET; const name: PSockAddr; namelen: integer): integer;
-
- function getpeername(s: TSOCKET; name: PSockAddr; namelen: PInteger): integer;
-
- function getsockname(s: TSOCKET; name: PSockAddr; namelen: PInteger): integer;
-
- function getsockopt(s: TSOCKET; level: integer; optname: integer;
- optval: PChar; optlen: PInteger): integer;
-
- function htonl(hostlong: u_long): u_long;
-
- function htons(hostshort: u_short): u_short;
-
- function inet_addr(const cp: PChar): longint;
-
- function inet_ntoa(ain: TIn_Addr): PChar;
-
- function ioctlsocket(s: TSOCKET; cmd: longint; argp: PLongint) : integer;
-
- function listen (s: TSOCKET; backlog: integer): integer;
-
- function ntohl(netlong: u_long): u_long;
-
- function ntohs(netshort: u_short): u_short;
-
- function recv(s : TSOCKET; buf: PChar; len: integer; flags: integer): integer;
-
- function recvfrom(s : TSOCKET; buf: PChar; len: integer; flags: integer;
- from: PSockAddr; fromlen: PInteger): integer;
-
- function select(nfds: integer; readfds: PFd_Set; writefds: PFd_Set;
- exceptfds: PFd_Set; const timeout: PTimeval): integer;
-
- function send(s: TSOCKET; const buf: PChar; len: integer; flags: integer): integer;
-
- function sendto(s: TSOCKET; const buf: PChar; len: integer; flags: integer;
- const ato: PSockAddr; tolen: integer): integer;
-
- function setsockopt(s: TSOCKET; level: integer; optname: integer;
- const optval: PChar; optlen: integer): integer;
-
- function shutdown(s: TSOCKET; how: integer): integer;
-
- function socket(af: integer; atype: integer; protocol: integer): TSOCKET;
-
- (* Database function prototypes *)
-
- function gethostbyaddr(const addr: PChar; len: integer; atype: integer): PHostEnt;
-
- function gethostbyname(const name: PChar): PHostEnt;
-
- function gethostname(name: PChar; namelen: integer): integer;
-
- function getprotobyname(const name: PChar): PProtoEnt;
-
- function getprotobynumber(proto: integer): PProtoEnt;
-
- function getservbyname(const name: PChar; const proto: PChar): PServEnt;
-
- function getservbyport(port: integer; const proto: PChar): PServEnt;
-
-
- (* Microsoft Windows Extension function prototypes *)
-
- function WSAAsyncGetHostByAddr(hWnd: HWND; wMsg: u_int;
- const addr: PChar; len: integer; atype: integer;
- buf: PChar; buflen: integer): THandle; (* RMB 03/10/96 1.03 *)
- (* 04/23/93 update to original WINSOCK.H *)
-
- function WSAAsyncGetHostByName(hWnd: HWND; wMsg: u_int;
- const name: PChar; buf: PChar;
- buflen: integer): THandle;
-
- function WSAAsyncGetProtoByName(hWnd: HWND; wMsg: u_int;
- const name: PChar; buf: PChar;
- buflen: integer): THandle;
-
- function WSAAsyncGetProtoByNumber(hWnd: HWND; wMsg: u_int;
- number: integer; buf: PChar;
- buflen: integer): THandle;
-
- function WSAAsyncGetServByName(hWnd: HWND; wMsg: u_int;
- const name: PChar;
- const proto: PChar;
- buf: PChar; buflen: integer): THandle;
-
- function WSAAsyncGetServByPort(hWnd: HWND; wMsg: u_int; port: integer;
- const proto: PChar; buf: PChar;
- buflen: integer): THandle;
-
- function WSAAsyncSelect(s : TSocket; hWnd: HWND; wMsg: u_int;
- lEvent: longint): integer;
-
- function WSACancelAsyncRequest(hAsyncTaskHandle: THandle): integer;
-
- function WSACancelBlockingCall: integer;
-
- function WSACleanup: integer;
-
- function WSAGetLastError: integer;
-
- function WSAIsBlocking: boolean;
-
- function WSASetBlockingHook(lpBlockFunc: TFarProc): TFarProc;
-
- procedure WSASetLastError(iError: integer);
-
- function WSAStartup(wVersionRequired: word; lpWSAData: PWSAData): integer;
-
- function WSAUnhookBlockingHook: integer;
-
- (*
- * Windows message parameter composition and decomposition
- * macros.
- *
- * WSAMAKEASYNCREPLY is inteneded for use by the Windows Sockets implementation
- * when constructing the response to a WSAAsyncGetXByX() routine.
- *)
- function WSAMakeAsyncReply(buflen, error: word): longint;
- (*
- * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
- * when constructing the response to WSAAsyncSelect().
- *)
- function WSAMakeSelectReply(event, error: word): longint;
- (*
- * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
- * to extract the buffer length from the lParam in the response
- * to a WSAGetXByY().
- *)
- function WSAGetAsyncBuflen(lparam: longint): word;
- (*
- * WSAGETASYNCERROR is intended for use by the Windows Sockets application
- * to extract the error code from the lParam in the response
- * to a WSAGetXByY().
- *)
- function WSAGetAsyncError(lparam: longint): word;
- (*
- * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
- * to extract the event code from the lParam in the response
- * to a WSAAsyncSelect().
- *)
- function WSAGetSelectEvent(lparam: longint): word;
- (*
- * WSAGETSELECTERROR is intended for use by the Windows Sockets application
- * to extract the error code from the lParam in the response
- * to a WSAAsyncSelect().
- *)
- function WSAGetSelectError(lparam: longint): word;
-
- implementation
-
- uses
- WinProcs;
-
- function accept; external 'WINSOCK' index 1;
- function bind; external 'WINSOCK' index 2;
- function closesocket; external 'WINSOCK' index 3;
- function connect; external 'WINSOCK' index 4;
- function getpeername; external 'WINSOCK' index 5;
- function getsockname; external 'WINSOCK' index 6;
- function getsockopt; external 'WINSOCK' index 7;
- function htonl; external 'WINSOCK' index 8;
- function htons; external 'WINSOCK' index 9;
- function inet_addr; external 'WINSOCK' index 10;
- function inet_ntoa; external 'WINSOCK' index 11;
- function ioctlsocket; external 'WINSOCK' index 12;
- function listen; external 'WINSOCK' index 13;
- function ntohl; external 'WINSOCK' index 14;
- function ntohs; external 'WINSOCK' index 15;
- function recv; external 'WINSOCK' index 16;
- function recvfrom; external 'WINSOCK' index 17;
- function select; external 'WINSOCK' index 18;
- function send; external 'WINSOCK' index 19;
- function sendto; external 'WINSOCK' index 20;
- function setsockopt; external 'WINSOCK' index 21;
- function shutdown; external 'WINSOCK' index 22;
- function socket; external 'WINSOCK' index 23;
-
- function gethostbyaddr; external 'WINSOCK' index 51;
- function gethostbyname; external 'WINSOCK' index 52;
- function getprotobyname; external 'WINSOCK' index 53;
- function getprotobynumber; external 'WINSOCK' index 54;
- function getservbyname; external 'WINSOCK' index 55;
- function getservbyport; external 'WINSOCK' index 56;
- function gethostname; external 'WINSOCK' index 57;
-
- function WSAAsyncSelect; external 'WINSOCK' index 101;
- function WSAAsyncGetHostByAddr; external 'WINSOCK' index 102;
- function WSAAsyncGetHostByName; external 'WINSOCK' index 103;
- function WSAAsyncGetProtoByNumber; external 'WINSOCK' index 104;
- function WSAAsyncGetProtoByName; external 'WINSOCK' index 105;
- function WSAAsyncGetServByPort; external 'WINSOCK' index 106;
- function WSAAsyncGetServByName; external 'WINSOCK' index 107;
- function WSACancelAsyncRequest; external 'WINSOCK' index 108;
- function WSASetBlockingHook; external 'WINSOCK' index 109;
- function WSAUnhookBlockingHook; external 'WINSOCK' index 110;
- function WSAGetLastError; external 'WINSOCK' index 111;
- procedure WSASetLastError; external 'WINSOCK' index 112;
- function WSACancelBlockingCall; external 'WINSOCK' index 113;
- function WSAIsBlocking; external 'WINSOCK' index 114;
- function WSAStartup; external 'WINSOCK' index 115;
- function WSACleanup; external 'WINSOCK' index 116;
-
- function __WSAFDIsSet; external 'WINSOCK' index 151;
-
- procedure Fd_Clr(fd: TSocket; aset: PFd_Set);
- var
- i: u_int;
- begin
- for i := 0 to aset^.fd_count do
- begin
- if aset^.fd_array[i] = fd then (* found the one to clear *)
- begin
- while i < (aset^.fd_count-1) do
- begin
- aset^.fd_array[i] := aset^.fd_array[i+1];
- inc(i);
- end;
- dec(aset^.fd_count);
- break;
- end;
- end;
- end;
-
- procedure Fd_Set(fd: TSocket; aset: PFd_Set);
- begin
- if aset^.fd_count < FD_SETSIZE then
- begin
- aset^.fd_array[aset^.fd_count] := fd;
- inc(aset^.fd_count);
- end;
- end;
-
- procedure Fd_Zero(aset: PFd_Set);
- begin
- aset^.fd_count := 0;
- end;
-
- function Fd_IsSet(fd: TSocket; aset: PFd_Set): boolean;
- begin
- Fd_IsSet := (__WSAFDIsSet(fd, aSet) > 0);
- end;
-
- function h_addr(aHostEnt: THostEnt): PChar; (* RMB 09/29/94 1.02 *)
- begin
- h_addr := aHostEnt.h_addr_list^;
- end;
-
- function s_addr(S_un: TIn_Addr): u_long;
- begin
- s_addr := S_un.S_addr; (* can be used for most tcp & ip code *)
- end;
-
- function s_host(S_un: TIn_Addr): u_char;
- begin
- s_host := S_un.S_un_b.s_b2; (* host on imp *)
- end;
-
- function s_net(S_un: TIn_Addr): u_char;
- begin
- s_net := S_un.S_un_b.s_b1; (* network *)
- end;
-
- function s_imp(S_un: TIn_Addr): u_short;
- begin
- s_imp := S_un.S_un_w.s_w2; (* imp *)
- end;
-
- function s_impno(S_un: TIn_Addr): u_char;
- begin
- s_impno := S_un.S_un_b.s_b4; (* imp $ *)
- end;
-
- function s_lh(S_un: TIn_Addr): u_char;
- begin
- s_lh := S_un.S_un_b.s_b3; (* logical host *)
- end;
-
- function In_ClassA(i : longint) : boolean;
- begin
- In_ClassA := ((i and $80000000) = 0);
- end;
-
- function In_ClassB(i : longint) : boolean;
- begin
- In_ClassB := ((i and $c0000000) = $80000000);
- end;
-
- function In_ClassC(i : longint) : boolean;
- begin
- In_ClassC := ((i and $e0000000) = $c0000000); (* RMB 03/10/96 1.03 *)
- (* 05/15/93 to original WINSOCK.H *)
- end;
-
- function h_errno : integer;
- begin
- h_errno := WSAGetLastError;
- end;
-
- function WSAMakeAsyncReply(buflen, error: word): longint;
- begin
- WSAMakeAsyncReply := MakeLong(buflen, error);
- end;
-
- function WSAMakeSelectReply(event, error: word): longint;
- begin
- WSAMakeSelectReply := MakeLong(event, error);
- end;
-
- function WSAGetAsyncBuflen(lparam: longint): word;
- begin
- WSAGetAsyncBuflen := LoWord(lparam);
- end;
-
- function WSAGetAsyncError(lparam: longint): word;
- begin
- WSAGetAsyncError := HiWord(lparam);
- end;
-
- function WSAGetSelectEvent(lparam: longint): word;
- begin
- WSAGetSelectEvent := LoWord(lparam);
- end;
-
- function WSAGetSelectError(lparam: longint): word;
- begin
- WSAGetSelectError := HiWord(lparam);
- end;
-
- END.